from ollama import AsyncClient, Client

from config import OLLAMA_HOST, OLLAMA_MODEL
from domain.pd import ProductMarkdown


# ✅ Ollama Prompt 构造函数
def build_prompt(keyword: str) -> str:
    return f"""请根据以下关键词生成一个商品标题和商品详情。
    要求：
    - 返回 JSON 格式，字段包含 title、description；
    - title 不超过 30 个字符；
    - description 使用 Markdown 格式，换行使用两个空格 `  `，展示卖点，不超过 300 字；
    - 不需要解释说明，直接返回 JSON。
    
    关键词：{keyword}
    """

# ✅ 主函数
def get_product_desc_from_ollama(keyword_input):
    #keyword_input = "蓝牙耳机、运动、防水、降噪、长续航"
    prompt = build_prompt(keyword_input)

    client = Client(host=OLLAMA_HOST)

    # ✅ 设置历史对话消息
    messages = [
        {
            "role": "system",
            "content": "你是一个专业电商文案生成助手，擅长用 markdown 格式写出结构清晰的商品文案。",
        },
        {
            "role": "user",
            "content": build_prompt("蓝牙耳机、轻盈、通话清晰、长续航"),
        },
        {
            "role": "assistant",
            "content": """{
  "title": "轻盈蓝牙耳机 清晰通话长续航",
  "description": "### 产品亮点\\n\\n- **佩戴轻盈**：仅5g机身，长时间佩戴无压力。  \\n- **高清通话**：双麦克风降噪，语音清晰不延迟。  \\n- **长效续航**：单次10小时使用，配仓30小时。  \\n\\n> 通勤、运动两相宜，释放双耳不受“线”制。"
}""",
        },
        {
            "role": "user",
            "content": prompt,
        }
    ]

    # ✅ 发送请求
    response = client.chat(
        model= OLLAMA_MODEL,  # 替换成你的实际模型
        messages=messages,
        format=ProductMarkdown.model_json_schema(),
        options={"temperature": 0.2}
    )

    try:
        product = ProductMarkdown.model_validate_json(response.message.content)
        print("✅ 商品信息生成成功：\n")
        print("【标题】", product.title)
        print("【Markdown详情】\n", product.description)
        #print(product.model_dump_json())
        return product.model_dump_json()
    except Exception as e:
        print("❌ 验证失败：", e)
        print("模型原始响应：", response.message.content)
        return None


if __name__ == "__main__":
    get_product_desc_from_ollama("蓝牙耳机、运动、防水、降噪、长续航")
